/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gui;

import Toepen.LoungeFacade.ILoungeFacade;
import Toepen.LoungeFacade.ILoungeObserver;
import Toepen.LoungeFacade.LoungeFacade;
import Toepen.LoungeFacade.LoungeObservable;
import Toepen.LoungeFacade.LoungeSpel;
import Toepen.SpelFacade.ISpelFacade;
import Toepen.SpelFacade.SpelFacadeFactory;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/**
 * Geeft alle updates door aan de geregistreerde GUILounge
 * @author LucasD
 */
class LoungeObserver extends UnicastRemoteObject implements ILoungeObserver {

    private GUILounge loungeGUI;

    /**
     * Constructor voor LoungeObserver
     * @param loungeGUI GUILounge die updates krijgt
     * @throws java.rmi.RemoteException
     */
    public LoungeObserver(GUILounge loungeGUI) throws RemoteException {
        this.loungeGUI = loungeGUI;
    }

    /**
     * Update de GUILounge met nieuwe gegevens
     * @param observable LoungeObservable met nieuwe gegevens
     * @throws java.rmi.RemoteException
     */
    public void update(LoungeObservable observable) throws RemoteException {
        this.loungeGUI.update(observable);
    }

    /**
     * Start het spel, geeft een facade en start daarna het spelscherm op
     * @param spel spel wat gestart wordt
     * @param facade waarmee gecommuniceerd wordt
     * @throws java.rmi.RemoteException
     */
    public void start(LoungeSpel spel, ILoungeFacade facade) throws RemoteException
    {
        ISpelFacade spelFacade=SpelFacadeFactory.Create(spel, facade);
        this.loungeGUI.startSpel(spelFacade);
    }
}
